In a typical environment involving digital data processing and/or data communications, memory devices are invoked for a variety of reasons, for example, to read, write, modify, delete, or change the attributes of the data that resides on a memory device. These operations (hereinafter referred to as memory ‘access’ operations) may be targeted to access varying chunks of data according the needs of an application program that invokes the specific memory access operation. For example, an application may require access to a small chunk of data from random addresses, the same address, or sequential addresses on the memory device. Similarly, the same or a different application may require access to large chunks of data from random addresses, the same address, or sequential addresses on the memory device. Examples of the different applications that may access a memory device include file systems, different databases, kernel reading code pages, and other applications that use the memory device.
applications that may access a memory device include file systems, different databases, kernel reading code pages, and other applications that use the memory device.
It is often the case that a mass memory device is optimized for one kind of application, or a defined group of applications, with particular memory access characteristics. This optimization, for example, may entail optimization of data throughput, life time and/or power consumption associated with the memory device. Due to this fixed optimization strategy, when a memory device is placed into a different environment with new access demands, it may fail to optimally perform under the requirements of the new environment. The lack of flexibility in optimizing such memory devices may be partly due to inherent limitations that render these memory devices incapable of accommodating optimized functionalities for multiple kinds of access operations. In other cases, however, the reason for electing to a memory device for a defined, and thus limited, group of applications is to simplify the design, and to effect cost savings. In addition, it is generally very difficult for a memory device to predict access requirements that are necessitated by yet-to-be determined future application needs.